#ifndef VALUE_H
#define VALUE_H

#include"../lvgl/lvgl.h"

//添加货品的输入窗口控件指针
extern lv_obj_t * input_win;//输入窗口
extern lv_obj_t * goods_id_ta;
extern lv_obj_t * goods_name_ta;
extern lv_obj_t * goods_quantity_ta;
extern lv_obj_t * goods_price_ta;
extern lv_obj_t * goods_type_ta;
extern lv_obj_t *keyboard;

//商品结构体
typedef struct goods{
    int id; //商品id
    char name[32];//商品名称
    float price;//商品价格
    int quantity;//商品库存
    char type[32];//商品种类
}Goods;

//商品链表
typedef struct goodslist{
    int id; //商品id
    char name[32];//商品名称
    float price;//商品价格
    int quantity;//商品库存
    char type[32];//商品种类
    struct goodslist *next;
}Goodslist;

// 定义一个结构体来存储注册用户数据
typedef struct {
    lv_obj_t *username_ta;
    lv_obj_t *password_ta;
    lv_obj_t *password_ta2;;
} UserData;

// 定义一个结构体来存储选择登录的类型以及账号密码
typedef struct {
    lv_obj_t *username_ta;
    lv_obj_t *password_ta;
    char flag[32];
} seleteData;

// 定义一个结构体来存储查找商品的数据:id、name、type以及显示的容器
typedef struct {
    lv_obj_t *find_goods_id_ta;
    lv_obj_t *find_goods_name_ta;
    lv_obj_t *find_goods_type_dp;
    lv_obj_t *goods_table_cont;
    lv_obj_t *tmp5;
    lv_obj_t *tmp6;
    lv_obj_t *tmp7;
} FindData;


//用户信息结构体
typedef struct userinfo{
    char username[32];//账号
    char password[32];//密码
    int identity;//身份:0.管理员 1.普通用户 2.vip
    float Total_consumption;//总消耗金额 金额达到一定数量，折扣会改变，vip等级也会改变
    float discount;//折扣:默认 1 (0.1-1)
    int credits;//积分 :默认为0，vip账户通过购买商品可增加积分，消耗积分可用于抵押一定金额或兑换部分商品
    float balance;//钱包余额
}Userinfo;

//用户链表
typedef struct user{
    char username[32];//账号
    char password[32];//密码
    int identity;//身份:0.管理员 1.普通用户 2.vip
    float Total_consumption;//总消耗金额 金额达到一定数量，折扣会改变，vip等级也会改变
    float discount;//折扣:默认 1 (0.1-1)
    int credits;//积分 :默认为0，vip账户通过购买商品可增加积分，消耗积分可用于抵押一定金额或兑换部分商品
    float balance;//钱包余额
    struct user *next;
}User;


//定义一个存放商品种类，以及容器的结构体类型
typedef struct type_cont
{
    char type[32];
    lv_obj_t *tmp1;
}type_cont;

//支付时购物车的数据
typedef struct cart
{
    lv_obj_t *tmp1;
    lv_obj_t *tmp2;
    lv_obj_t *tmp3;
    lv_obj_t *tmp4;
    lv_obj_t *tmp5;
    lv_obj_t *tmp6;
    lv_obj_t *tmp7;
    lv_obj_t *tmp8;
    lv_obj_t *tmp9;

}goods_cart;

//购物车组件数据
typedef struct one_cart_cont
{
    lv_obj_t *cont;
    lv_obj_t *img_cont;
    lv_obj_t *img;
    lv_obj_t *current_amount;
    lv_obj_t *current_amount_label;
}one_cart_cont;

//日志操作的一些动作
typedef enum{
    LOG_LOGIN,          //登录事件
    LOG_LOGOUT,         //登出事件
    LOG_ADD_ITEM,          //添加货物事件
    LOG_DEL_ITEM,          //删除货物事件
    LOG_UPDATE_ITEM,          //更新货物
    LOG_NUMS       //日志类型总数 
}LogAction;

typedef struct LogEntry
{
    char date[50];//时间戳
    LogAction action;//操作类型
    char username[32];//操作用户
    int item_id;//货物id
    char description[128];//货物信息
    struct LogEntry *prev;
    struct LogEntry *next;
}LogEntry;



//当前购物车中的商品、数量
typedef struct cart_goods
{
    char name[32];
    int quantity;
    lv_obj_t *quantity_label;//数量标签
    int remainder;
    lv_obj_t *remainder_label;//剩余数量标签

}Cart_goods;

//当前购物车中的商品、数量
typedef struct cart_goods_list
{
    char name[32];
    int quantity;
    lv_obj_t *quantity_label;//数量标签
    int remainder;
    lv_obj_t *remainder_label;//剩余数量标签
    struct cart_goods_list *next;
}Cart_goods_list;

//变量声明
#define MAX_GOODS 100
// extern Goods goods_arr[MAX_GOODS];
extern Goodslist *goods_list;
extern User *user_list;
extern int goods_count;
extern Userinfo cur_user;
extern one_cart_cont *cart_cont;
extern one_cart_cont *shop_cart_cont;
extern LogEntry *log_head;
//购物车选择商品链表
extern Cart_goods_list *cart_goods_list;
#endif